#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
环境依赖检查脚本
功能：检查批量背景替换工具所需的依赖是否正确安装
"""

import sys

def check_python_version():
    """检查 Python 版本"""
    print("=" * 70)
    print("🐍 检查 Python 版本")
    print("-" * 70)
    version = sys.version_info
    print(f"   版本: {version.major}.{version.minor}.{version.micro}")
    
    if version.major == 3 and version.minor >= 8:
        print("   ✅ Python 版本符合要求 (>= 3.8)")
        return True
    else:
        print(f"   ❌ Python 版本过低，建议使用 Python 3.8 或更高版本")
        return False

def check_package(package_name, version_check=None):
    """
    检查单个包是否安装以及版本
    
    Args:
        package_name: 包名
        version_check: 版本检查函数
    """
    try:
        module = __import__(package_name)
        version = getattr(module, '__version__', 'unknown')
        print(f"   ✅ {package_name:<20} 版本: {version}")
        
        if version_check and version != 'unknown':
            return version_check(version)
        return True
    except ImportError:
        print(f"   ❌ {package_name:<20} 未安装")
        return False

def check_numpy_version(version_str):
    """检查 NumPy 版本是否兼容"""
    try:
        major = int(version_str.split('.')[0])
        if major >= 2:
            print(f"      ⚠️  NumPy 2.x 不兼容，需要降级到 1.x")
            return False
        return True
    except:
        return True

def check_dependencies():
    """检查所有依赖"""
    print("=" * 70)
    print("📦 检查依赖包")
    print("-" * 70)
    
    results = {}
    
    # 检查 NumPy（关键）
    results['numpy'] = check_package('numpy', check_numpy_version)
    
    # 检查其他依赖
    results['PIL'] = check_package('PIL')  # Pillow
    results['rembg'] = check_package('rembg')
    results['onnxruntime'] = check_package('onnxruntime')
    
    return all(results.values())

def check_imports():
    """检查能否正常导入关键模块"""
    print("=" * 70)
    print("🔍 检查模块导入")
    print("-" * 70)
    
    try:
        from rembg import remove, new_session
        print("   ✅ rembg 模块导入成功")
        print("   ✅ new_session 函数可用")
        return True
    except Exception as e:
        print(f"   ❌ rembg 导入失败: {e}")
        return False

def print_recommendations():
    """打印修复建议"""
    print()
    print("=" * 70)
    print("💡 修复建议")
    print("-" * 70)
    print()
    print("如果检查未通过，请执行以下命令：")
    print()
    print("【方案1】降级 NumPy（最简单）")
    print("   pip install \"numpy<2.0\"")
    print()
    print("【方案2】使用 requirements 文件")
    print("   pip install -r requirements_bg_replace.txt")
    print()
    print("【方案3】完全重装（最彻底）")
    print("   pip uninstall numpy onnxruntime rembg -y")
    print("   pip install \"numpy<2.0\" pillow rembg")
    print()
    print("=" * 70)

def main():
    """主函数"""
    print()
    print("🔧 批量背景替换工具 - 环境检查")
    print()
    
    # 检查 Python 版本
    python_ok = check_python_version()
    
    # 检查依赖包
    deps_ok = check_dependencies()
    
    # 检查导入
    import_ok = check_imports()
    
    # 总结
    print()
    print("=" * 70)
    print("📊 检查总结")
    print("-" * 70)
    
    all_ok = python_ok and deps_ok and import_ok
    
    if all_ok:
        print("   ✅ 所有检查通过，环境配置正确！")
        print("   ✅ 可以运行批量背景替换脚本")
    else:
        print("   ❌ 环境配置有问题，请参考下方建议修复")
        print_recommendations()
    
    print("=" * 70)
    print()
    
    return 0 if all_ok else 1

if __name__ == "__main__":
    sys.exit(main())
